//定义控制器
app.controller("studentController",function ($scope,studentService) {
    //初始化搜索的entity变量
    $scope.searchEntity={};
    //初始化要删除的学生id的数组
    $scope.selectIds=[];

    //2.0）定义分页的配置
    $scope.paginationConf= {
        currentPage: 1,	//代表当前页
        itemsPerPage: 5,	//代表每页的记录数
        totalItems: 100,	//代表总记录数
        perPageOptions: [5, 10, 15, 20, 25, 30], //代表分页的选项列表
        onChange: function () {	//每次页码改变时此事件会自动调用,窗体一加载完毕会自带调用
            //① 进行分页查询，但不带有条件查询功能
            //$scope.findByPage($scope.paginationConf.currentPage, $scope.paginationConf.itemsPerPage)
            //将上面的方法换成条件查询带分页功能的search方法
            $scope.search();
            //② 查询出所有的班级列表
            $scope.findClasses();
        }
    }

    //2.1)定义方法查询所有的学生(不带分页)
    $scope.findAll= function () {
       studentService.findAll().success(response=>{
            $scope.list = response;
        })
    }
    //2.2)查询所有的学生（带有分页功能，但不能条件查询）
    $scope.findByPage= (page,pagesize)=>{
        studentService.findByPage(page, pagesize).success(response=>{
            //查询成功，就重新设置分页总记录数和定义全局变量，如：list
            //查询在后台返回的是PageResult对象，有两个属性：
            //private long tota;
            //private List<T> list;
            //① 更新部记录数
            $scope.paginationConf.totalItems = response.total;
            //② 定义全局变量(这里的list代表每页的集合)
            $scope.list = response.list;

        })
    }
    //2.3)查询所有的班级
    $scope.findClasses=()=>{
        studentService.findClasses().success(response=>{
            $scope.classes = response;
        })
    }
    //2.4)条件查询带分页
    $scope.search= ()=>{
        //因为默认为自动生成一个空的select选项，所以，这里做一些兼容处理

        studentService.search($scope.paginationConf.currentPage,
                              $scope.paginationConf.itemsPerPage,
                              $scope.searchEntity).success(response=>{
            //1.更新总记录数
            $scope.paginationConf.totalItems = response.total;
            //2.为全局变量list赋值
            $scope.list = response.list;
        })
    }
    //2.5)添加学生的模态框弹出
    $scope.addUI =()=>{
        //① 清空$scope.entity的内容
        $scope.entity = {};
        //② 打开模态框
        $('#myModal').modal('show')
    }
    //2.6)修改的界面
    $scope.updateUI = (stud)=>{
        //① 就是将传递过来的stud对象赋值给$scope.entity这个对象
        stud.birth = $scope.procDate(stud.birth);  //处理日期数据
        $scope.entity = stud;
        //② 打开模态框
        $('#myModal').modal('show');
    }
    //2.7)点击“保存”按钮(身兼两职：添加/修改)
    $scope.save =()=>{
        //业务逻辑：根据当前要添加或修改的学生的编号sid是否有值确定是修改还是添加
        //如果是修改：$scope.entity.sid一定有值，如果是添加，$scope.entity.sid一定无值
        //定义添加或修改的url地址
        var url = "student/add.do";      //添加
        if ($scope.entity.sid){         //执行修改操作
            url =  "student/update.do";
        }
        opeStudent(url);                //根据url地址执行：添加或修改操作
    }
    //定义【添加/修改】学生的方法
    opeStudent= (url)=>{
        studentService.save(url,$scope.entity).success(response=>{
            //根据response.success返回结果，执行面的操作
            if (response.success){
                //如果成功
                //① 刷新列表
                $scope.search();
                //② 关闭模态框
                $('#myModal').modal('hide')
            }
            else {
                //如果失败
                alert(resonse.message);
            }
        })
    }

    //2.8) 根据学生编号删除学生
    $scope.del = (sid)=>{
        if (confirm("你真的要删除吗?")){
           studentService.del(sid).success(response=>{
                if (response.success){      //删除成功
                    //刷新页面
                    $scope.search();
                } else{
                    alert(response.message);
                }
            })
        } ;
    }
    //2.9 删除选中的所有学生
    $scope.selectStuds = (sid,event)=>{
        if(event.target.checked){  //如果你点击的复选框被勾选,向$sccope.selectedIds数组中放选中的学生id
            $scope.selectIds.push(sid);
        }else{                      //如果取消选择就将其从数组中移除
            //① 得到数组的下标索引
            //var index = $scope.selectIds.indexOf(sid);
            //或者：使用ES6语法查找索引的方法
            let index = $scope.selectIds.findIndex((v,i)=>{
                return v == sid;  //这里的v == sid其实就是查找的条件
            })
            //② 根据数组的索引从数组中删除一个元素
            $scope.selectIds.splice(index,1) ; //参数1：要删除的元素在数组中中的下标索引 参数2：代表删除的个数
        }
    }
    //3.0) 向后台发出批量删除的请求
    $scope.batchDel = ()=>{
        studentService.batchDel($scope.selectIds).success(response=>{
            if (response.success){      //删除成功
                //刷新页面
                $scope.search();
            } else{
                alert(response.message);
            }
        })
    }

    //将传过来的毫秒值转换为日期字符串
    $scope.procDate= times=> {
        let date = new Date(times);
        return date.getFullYear() + "-" + (date.getMonth() + 1) + "-" + date.getDate();
    }
})